package com.black.order.config;

import com.alibaba.cloud.nacos.NacosConfigManager;
import com.alibaba.nacos.api.config.ConfigService;
import com.alibaba.nacos.api.config.listener.Listener;
import feign.Logger;
import feign.Retryer;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.ApplicationRunner;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

import java.util.concurrent.Executor;
import java.util.concurrent.Executors;

/**
 * @Author: Young
 * @CreateTime: 2025-07-30
 * @Description:
 * @Version: 1.0
 */
@Slf4j
@Configuration
public class OrderConfig {

    /**
     * 重试策略，需要兜底的时候，这个可以注释掉
     * @return
     */
//    @Bean
//    Retryer retryer() {
//        return new Retryer.Default();
//    }
    /**
     * @LoadBalanced 开启负载均衡
     * @return
     */
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

    @Bean
    Logger.Level feignLoggerLevel() {
        return Logger.Level.FULL;
    }

    /**
     * 一次性任务，这里我们监听nacos的配置变更，并打印
     * @param nacosConfigManager
     * @return
     */
//    @Bean
//    ApplicationRunner applicationRunner(NacosConfigManager nacosConfigManager) {
//        return args -> {
//            // 从 Nacos 配置中心获取配置
//            ConfigService configService = nacosConfigManager.getConfigService();
//            // 不限于监听自身的配置，也可以监听其他服务的配置
//            configService.addListener("common.properties", "order", new Listener() {
//                @Override
//                public void receiveConfigInfo(String configInfo) {
//                    System.out.println(configInfo);
//                }
//
//                @Override
//                public Executor getExecutor() {
//                    return Executors.newFixedThreadPool(4);
//                }
//            });
//            log.info("nacos config listener start");
//        };
//    }
}
